package com.njtech.pet.service;

import com.njtech.pet.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Author:gm
 * Date:2020-03-08 16:38
 * Description:<描述>
 */
public interface UserService {

    /**
     * 根据用户id找user
     * @param id
     * @return
     */
    User selectByUserId(Integer id);

    /**
     * 根据用户名和用户状态查找用户
     * @param username
     * @return User
     */
    User findByName(String username);

    /**
     * 插入一个用户
     * @param user
     * @return int
     */
    String insert(User user);

    /**
     * 修改用户密码
     * @param user
     * @return int
     */
    int updateUserPwd(User user);

    /**
     * 修改用户个人信息
     * @param user
     * @return int
     */
    int updateUser(User user);

    /**
     * 根据用户名和用户状态查找用户，由于可能会有多个用户返回结果，所以返回的List
     * @param username 欲查找的用户名
     * @param state 用户状态
     * @return 用户列表
     */
    List<User> selectByUserNameAndState(@Param("username") String username, @Param("state") String state);

    /**
     * 根据用户封装的id、用户名（用户名单关键字模糊查询）、性别、角色、状态 以及提供的创建和修改日期的起止日期范围进行灵活选择
     * @param uid
     * @param username
     * @param sex
     * @param role
     * @param state
     * @param beginCreateDate
     * @param endCreateDate
     * @param beginUpdateDate
     * @param endUpdateDate
     * @return
     */
    List<User> selectElasticly(Integer uid,String username,String sex,String role,  String state,String beginCreateDate, String endCreateDate, String beginUpdateDate, String endUpdateDate);


    /**
     *
     * @param operatorRole   操作人角色
     * @param user       要修改的用户
     * @param newPwd         新密码
     * @param oldPwd         旧密码
     * @return
     */
    String changePwd(String operatorRole,User user,String newPwd,String oldPwd);

}
